using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._PointCloud
{
    /// <summary>
    /// <para>Thin LAS</para>
    /// <para>Creates new LAS files that contain a subset of LAS points from the input LAS dataset.</para>
    /// <para>创建包含输入 LAS 数据集中 LAS 点子集的新 LAS 文件。</para>
    /// </summary>    
    [DisplayName("Thin LAS")]
    public class ThinLas : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ThinLas()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// </param>
        /// <param name="_target_folder">
        /// <para>Target Folder</para>
        /// <para>The existing folder to which the output .las files will be written.</para>
        /// <para>输出 .las 文件将写入到的现有文件夹。</para>
        /// </param>
        /// <param name="_thinning_dimension">
        /// <para>Thinning Dimension</para>
        /// <para><xdoc>
        ///   <para>The type of thinning operation that will be conducted.</para>
        ///   <bulletList>
        ///     <bullet_item>2D—Thinning will occur in tiles defined along the x,y-axis.</bullet_item><para/>
        ///     <bullet_item>3D—Thinning will occur in volumes of space defined by tiles along the x,y-axis, and height gradients along the z-axis. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将要执行的疏伐操作类型。</para>
        ///   <bulletList>
        ///     <bullet_item>2D - 沿 x，y 轴定义的切片将发生变薄。</bullet_item><para/>
        ///     <bullet_item>3D - 在由沿 x、y 轴的切片和沿 z 轴的高度渐变定义的空间体积中将发生变薄。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_xy_resolution">
        /// <para>Target XY Resolution</para>
        /// <para>The size of each side of the thinning tile along the x,y-axis.</para>
        /// <para>沿 x，y 轴的变薄瓷砖每侧的大小。</para>
        /// </param>
        public ThinLas(object _in_las_dataset, object _target_folder, _thinning_dimension_value _thinning_dimension, string? _xy_resolution)
        {
            this._in_las_dataset = _in_las_dataset;
            this._target_folder = _target_folder;
            this._thinning_dimension = _thinning_dimension;
            this._xy_resolution = _xy_resolution;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Thin LAS";

        public override string CallName => "3d.ThinLas";

        public override List<string> AcceptEnvironments => ["extent", "geographicTransformations", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_las_dataset, _target_folder, _thinning_dimension.GetGPValue(), _xy_resolution, _z_resolution, _point_selection_method.GetGPValue(), _class_codes_weights, _name_suffix, _out_las_dataset, _preserved_class_codes, _preserved_flags, _preserved_returns, _excluded_class_codes, _excluded_flags, _excluded_returns, _compression.GetGPValue(), _remove_vlr.GetGPValue(), _rearrange_points.GetGPValue(), _compute_stats.GetGPValue(), _output_folder];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Target Folder</para>
        /// <para>The existing folder to which the output .las files will be written.</para>
        /// <para>输出 .las 文件将写入到的现有文件夹。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Folder")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_folder { get; set; }


        /// <summary>
        /// <para>Thinning Dimension</para>
        /// <para><xdoc>
        ///   <para>The type of thinning operation that will be conducted.</para>
        ///   <bulletList>
        ///     <bullet_item>2D—Thinning will occur in tiles defined along the x,y-axis.</bullet_item><para/>
        ///     <bullet_item>3D—Thinning will occur in volumes of space defined by tiles along the x,y-axis, and height gradients along the z-axis. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将要执行的疏伐操作类型。</para>
        ///   <bulletList>
        ///     <bullet_item>2D - 沿 x，y 轴定义的切片将发生变薄。</bullet_item><para/>
        ///     <bullet_item>3D - 在由沿 x、y 轴的切片和沿 z 轴的高度渐变定义的空间体积中将发生变薄。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Thinning Dimension")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _thinning_dimension_value _thinning_dimension { get; set; }

        public enum _thinning_dimension_value
        {
            /// <summary>
            /// <para>2D</para>
            /// <para>2D—Thinning will occur in tiles defined along the x,y-axis.</para>
            /// <para>2D - 沿 x，y 轴定义的切片将发生变薄。</para>
            /// </summary>
            [Description("2D")]
            [GPEnumValue("2D")]
            _2D,

            /// <summary>
            /// <para>3D</para>
            /// <para>3D—Thinning will occur in volumes of space defined by tiles along the x,y-axis, and height gradients along the z-axis. This is the default.</para>
            /// <para>3D - 在由沿 x、y 轴的切片和沿 z 轴的高度渐变定义的空间体积中将发生变薄。这是默认设置。</para>
            /// </summary>
            [Description("3D")]
            [GPEnumValue("3D")]
            _3D,

        }

        /// <summary>
        /// <para>Target XY Resolution</para>
        /// <para>The size of each side of the thinning tile along the x,y-axis.</para>
        /// <para>沿 x，y 轴的变薄瓷砖每侧的大小。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target XY Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string? _xy_resolution { get; set; }


        /// <summary>
        /// <para>Target Z Resolution</para>
        /// <para>The height of each thinning region when using the 3D thinning method.</para>
        /// <para>使用 3D 细化方法时每个细化区域的高度。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Z Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _z_resolution { get; set; } = null;


        /// <summary>
        /// <para>Point Selection Method</para>
        /// <para><xdoc>
        ///   <para>The method used to determine which points are retained in each thinning region.</para>
        ///   <bulletList>
        ///     <bullet_item>Closest to Center—The LAS point that is closest to the center of the region being thinned. This is the default.</bullet_item><para/>
        ///     <bullet_item>Class Code Weights—The LAS points with the class code that has the highest weight assigned.</bullet_item><para/>
        ///     <bullet_item>Most Frequent Class Code—The LAS points with the most frequent class code value in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Lowest Point—The lowest LAS point in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Highest Point—The highest LAS point in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Lowest and Highest Point—The highest and lowest LAS points in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Closest to Average Height—The LAS point whose height is closest to the average of height of all points in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Lowest Intensity—The LAS point whose intensity value is the lowest among the points in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Highest Intensity—The LAS point whose intensity value is the highest among the points in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Lowest and Highest Intensity—The two LAS points with the lowest and the highest intensity values among the points in the region being thinned.</bullet_item><para/>
        ///     <bullet_item>Closest to Average Intensity—The LAS point whose intensity value is closest to the average of all intensity values from points in the region being thinned.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于确定在每个细化区域中保留哪些点的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>最接近中心 - 最接近要变薄区域中心的 LAS 点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>类代码权重 - LAS 点与分配权重最高的类代码相吻合。</bullet_item><para/>
        ///     <bullet_item>最频繁的类代码 - 在要细化的区域中具有最频繁类代码值的 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最低点 - 正在变薄的区域中的最低 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最高点 - 正在变薄的区域中的最高 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最低点和最高点 - 正在变薄的区域中的最高点和最低 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最接近平均高度 - 其高度最接近正在变薄区域中所有点的平均高度的 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最低强度 - 强度值在被细化区域的点中强度值最低的 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最高强度 - 其强度值在被细化区域的点中最高的 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最低强度和最高强度 - 在被稀释区域的点中，强度值最低和最高的两个 LAS 点。</bullet_item><para/>
        ///     <bullet_item>最接近平均强度 - 其强度值最接近正在变薄区域中所有强度值的平均值的 LAS 点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Point Selection Method")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _point_selection_method_value _point_selection_method { get; set; } = _point_selection_method_value._CLOSEST_TO_CENTER;

        public enum _point_selection_method_value
        {
            /// <summary>
            /// <para>Closest to Center</para>
            /// <para>Closest to Center—The LAS point that is closest to the center of the region being thinned. This is the default.</para>
            /// <para>最接近中心 - 最接近要变薄区域中心的 LAS 点。这是默认设置。</para>
            /// </summary>
            [Description("Closest to Center")]
            [GPEnumValue("CLOSEST_TO_CENTER")]
            _CLOSEST_TO_CENTER,

            /// <summary>
            /// <para>Class Code Weights</para>
            /// <para>Class Code Weights—The LAS points with the class code that has the highest weight assigned.</para>
            /// <para>类代码权重 - LAS 点与分配权重最高的类代码相吻合。</para>
            /// </summary>
            [Description("Class Code Weights")]
            [GPEnumValue("CLASS_CODE")]
            _CLASS_CODE,

            /// <summary>
            /// <para>Most Frequent Class Code</para>
            /// <para>Most Frequent Class Code—The LAS points with the most frequent class code value in the region being thinned.</para>
            /// <para>最频繁的类代码 - 在要细化的区域中具有最频繁类代码值的 LAS 点。</para>
            /// </summary>
            [Description("Most Frequent Class Code")]
            [GPEnumValue("PREDOMINANT_CLASS")]
            _PREDOMINANT_CLASS,

            /// <summary>
            /// <para>Lowest Point</para>
            /// <para>Lowest Point—The lowest LAS point in the region being thinned.</para>
            /// <para>最低点 - 正在变薄的区域中的最低 LAS 点。</para>
            /// </summary>
            [Description("Lowest Point")]
            [GPEnumValue("Z_MIN")]
            _Z_MIN,

            /// <summary>
            /// <para>Highest Point</para>
            /// <para>Highest Point—The highest LAS point in the region being thinned.</para>
            /// <para>最高点 - 正在变薄的区域中的最高 LAS 点。</para>
            /// </summary>
            [Description("Highest Point")]
            [GPEnumValue("Z_MAX")]
            _Z_MAX,

            /// <summary>
            /// <para>Lowest and Highest Point</para>
            /// <para>Lowest and Highest Point—The highest and lowest LAS points in the region being thinned.</para>
            /// <para>最低点和最高点 - 正在变薄的区域中的最高点和最低 LAS 点。</para>
            /// </summary>
            [Description("Lowest and Highest Point")]
            [GPEnumValue("Z_MIN_MAX")]
            _Z_MIN_MAX,

            /// <summary>
            /// <para>Closest to Average Height</para>
            /// <para>Closest to Average Height—The LAS point whose height is closest to the average of height of all points in the region being thinned.</para>
            /// <para>最接近平均高度 - 其高度最接近正在变薄区域中所有点的平均高度的 LAS 点。</para>
            /// </summary>
            [Description("Closest to Average Height")]
            [GPEnumValue("Z_AVERAGE")]
            _Z_AVERAGE,

            /// <summary>
            /// <para>Lowest Intensity</para>
            /// <para>Lowest Intensity—The LAS point whose intensity value is the lowest among the points in the region being thinned.</para>
            /// <para>最低强度 - 强度值在被细化区域的点中强度值最低的 LAS 点。</para>
            /// </summary>
            [Description("Lowest Intensity")]
            [GPEnumValue("INTENSITY_MIN")]
            _INTENSITY_MIN,

            /// <summary>
            /// <para>Highest Intensity</para>
            /// <para>Highest Intensity—The LAS point whose intensity value is the highest among the points in the region being thinned.</para>
            /// <para>最高强度 - 其强度值在被细化区域的点中最高的 LAS 点。</para>
            /// </summary>
            [Description("Highest Intensity")]
            [GPEnumValue("INTENSITY_MAX")]
            _INTENSITY_MAX,

            /// <summary>
            /// <para>Lowest and Highest Intensity</para>
            /// <para>Lowest and Highest Intensity—The two LAS points with the lowest and the highest intensity values among the points in the region being thinned.</para>
            /// <para>最低强度和最高强度 - 在被稀释区域的点中，强度值最低和最高的两个 LAS 点。</para>
            /// </summary>
            [Description("Lowest and Highest Intensity")]
            [GPEnumValue("INTENSITY_MIN_MAX")]
            _INTENSITY_MIN_MAX,

            /// <summary>
            /// <para>Closest to Average Intensity</para>
            /// <para>Closest to Average Intensity—The LAS point whose intensity value is closest to the average of all intensity values from points in the region being thinned.</para>
            /// <para>最接近平均强度 - 其强度值最接近正在变薄区域中所有强度值的平均值的 LAS 点。</para>
            /// </summary>
            [Description("Closest to Average Intensity")]
            [GPEnumValue("INTENSITY_AVERAGE")]
            _INTENSITY_AVERAGE,

        }

        /// <summary>
        /// <para>Input Class Codes and Weights</para>
        /// <para>The weights assigned to each class code that determine which points are retained in each thinning region. This parameter is only enabled when the Class Code Weights option is specified in the Point Selection Method parameter. The class code with the highest weight will be retained in the thinning region. If two class codes with the same weight exist in a given thinning region, the class code with the smallest point source ID will be retained.</para>
        /// <para>分配给每个类代码的权重，用于确定在每个细化区域中保留哪些点。仅当在“点选择方法”参数中指定了“类代码权重”选项时，才会启用此参数。具有最高权重的类代码将保留在变薄区域中。如果给定的细化区域中存在两个权重相同的类代码，则将保留具有最小点源 ID 的类代码。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Class Codes and Weights")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _class_codes_weights { get; set; } = null;


        /// <summary>
        /// <para>Output File Name Suffix</para>
        /// <para>The name added to each output file.</para>
        /// <para>添加到每个输出文件的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output File Name Suffix")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _name_suffix { get; set; } = null;


        /// <summary>
        /// <para>Output LAS Dataset</para>
        /// <para>The output LAS dataset referencing the newly created .las files.</para>
        /// <para>引用新创建的 .las 文件的输出 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_las_dataset { get; set; } = null;


        /// <summary>
        /// <para>Preserved Classes</para>
        /// <para>The input LAS points with the specified class code values will not be thinned from the output LAS files.</para>
        /// <para>具有指定类代码值的输入 LAS 点不会从输出 LAS 文件中细化。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserved Classes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _preserved_class_codes { get; set; } = null;


        /// <summary>
        /// <para>Preserved Flags</para>
        /// <para><xdoc>
        ///   <para>The input LAS points with the specified class flag designations will be preserved in the output LAS files.</para>
        ///   <bulletList>
        ///     <bullet_item>Model Key—Points with the model key class flag will be preserved.</bullet_item><para/>
        ///     <bullet_item>Overlap—Points with the overlap class flag will be preserved.</bullet_item><para/>
        ///     <bullet_item>Synthetic—Points with the synthetic class flag will be preserved.</bullet_item><para/>
        ///     <bullet_item>Withheld—Points with the withheld class flag will be preserved.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>具有指定类标志名称的输入 LAS 点将保留在输出 LAS 文件中。</para>
        ///   <bulletList>
        ///     <bullet_item>模型键 - 将保留带有模型键类标志的点。</bullet_item><para/>
        ///     <bullet_item>重叠—将保留具有重叠类标志的点。</bullet_item><para/>
        ///     <bullet_item>合成 - 将保留带有合成类标志的点。</bullet_item><para/>
        ///     <bullet_item>保留 - 将保留带有保留类标志的点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserved Flags")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _preserved_flags { get; set; } = null;


        /// <summary>
        /// <para>Preserved Returns</para>
        /// <para><xdoc>
        ///   <para>The input LAS points with the specified returns will be preserved in the output LAS files.</para>
        ///   <bulletList>
        ///     <bullet_item>Single returns—All single return points will be included.</bullet_item><para/>
        ///     <bullet_item>Last returns—All single and last returns will be included.</bullet_item><para/>
        ///     <bullet_item>First of many returns—All points that are the first of multiple returns will be included.</bullet_item><para/>
        ///     <bullet_item>Last of many returns—All points that are the last of multiple returns will be included.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>具有指定返回值的输入 LAS 点将保留在输出 LAS 文件中。</para>
        ///   <bulletList>
        ///     <bullet_item>单次退货—将包括所有单次退货积分。</bullet_item><para/>
        ///     <bullet_item>上次退货—将包括所有单次退货和最后一次退货。</bullet_item><para/>
        ///     <bullet_item>多次退货中的第一个 - 将包括多次退货中的第一个点的所有积分。</bullet_item><para/>
        ///     <bullet_item>多次退货中的最后一个 - 将包括多次退货中最后一个的所有点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserved Returns")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _preserved_returns { get; set; } = null;


        /// <summary>
        /// <para>Excluded Classes</para>
        /// <para>The input LAS points with the specified class code values will be excluded from the output LAS files.</para>
        /// <para>具有指定类代码值的输入 LAS 点将从输出 LAS 文件中排除。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Excluded Classes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _excluded_class_codes { get; set; } = null;


        /// <summary>
        /// <para>Excluded Flags</para>
        /// <para><xdoc>
        ///   <para>The input LAS points with the specified class flag designations will be excluded from the output LAS files.</para>
        ///   <bulletList>
        ///     <bullet_item>Model Key—Points with the model key class flag will be excluded.</bullet_item><para/>
        ///     <bullet_item>Overlap—Points with the overlap class flag will be excluded.</bullet_item><para/>
        ///     <bullet_item>Synthetic—Points with the synthetic class flag will be excluded.</bullet_item><para/>
        ///     <bullet_item>Withheld—Points with the withheld class flag will be excluded.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>具有指定类标志名称的输入 LAS 点将从输出 LAS 文件中排除。</para>
        ///   <bulletList>
        ///     <bullet_item>模型键 - 将排除具有模型键类标志的点。</bullet_item><para/>
        ///     <bullet_item>重叠 - 将排除具有重叠类标志的点。</bullet_item><para/>
        ///     <bullet_item>合成—将排除带有合成类标志的点。</bullet_item><para/>
        ///     <bullet_item>预扣 - 带有预扣类标志的积分将被排除。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Excluded Flags")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _excluded_flags { get; set; } = null;


        /// <summary>
        /// <para>Excluded Returns</para>
        /// <para><xdoc>
        ///   <para>The input LAS points with the specified returns will be excluded from the output LAS files.</para>
        ///   <bulletList>
        ///     <bullet_item>Single returns—All single return points will be excluded.</bullet_item><para/>
        ///     <bullet_item>Last returns—All single and last returns will be excluded.</bullet_item><para/>
        ///     <bullet_item>First of many returns—All points that are the first of multiple returns will be excluded.</bullet_item><para/>
        ///     <bullet_item>Last of many returns—All points that are the last of multiple returns will be excluded.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>具有指定返回值的输入 LAS 点将从输出 LAS 文件中排除。</para>
        ///   <bulletList>
        ///     <bullet_item>单次退货—将排除所有单次退货点。</bullet_item><para/>
        ///     <bullet_item>上次退货 - 将排除所有单次退货和最后一次退货。</bullet_item><para/>
        ///     <bullet_item>多次退货中的第一个 - 将排除多个退货中的第一个点。</bullet_item><para/>
        ///     <bullet_item>多次退货中的最后一个 - 将排除多个退货中最后一个的所有点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Excluded Returns")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _excluded_returns { get; set; } = null;


        /// <summary>
        /// <para>Compression</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output .las file will be in a compressed format or the standard LAS format.</para>
        ///   <bulletList>
        ///     <bullet_item>No Compression—The output will be in the standard LAS format (*.las file). This is the default.</bullet_item><para/>
        ///     <bullet_item>zLAS Compression—Output .las files will be compressed in the zLAS format.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出 .las 文件是压缩格式还是标准 LAS 格式。</para>
        ///   <bulletList>
        ///     <bullet_item>无压缩—输出将采用标准 LAS 格式（*.las 文件）。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>zLAS 压缩—输出 .las 文件将以 zLAS 格式进行压缩。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compression_value _compression { get; set; } = _compression_value._NO_COMPRESSION;

        public enum _compression_value
        {
            /// <summary>
            /// <para>No Compression</para>
            /// <para>No Compression—The output will be in the standard LAS format (*.las file). This is the default.</para>
            /// <para>无压缩—输出将采用标准 LAS 格式（*.las 文件）。这是默认设置。</para>
            /// </summary>
            [Description("No Compression")]
            [GPEnumValue("NO_COMPRESSION")]
            _NO_COMPRESSION,

            /// <summary>
            /// <para>zLAS Compression</para>
            /// <para>zLAS Compression—Output .las files will be compressed in the zLAS format.</para>
            /// <para>zLAS 压缩—输出 .las 文件将以 zLAS 格式进行压缩。</para>
            /// </summary>
            [Description("zLAS Compression")]
            [GPEnumValue("ZLAS")]
            _ZLAS,

        }

        /// <summary>
        /// <para>Remove Variable Length Records</para>
        /// <para><xdoc>
        ///   <para>Indicates whether variable length records stored with the input LAS points will be preserved or eliminated in the output LAS data.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Variable length records will be maintained in the output LAS points. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Variable length records will be removed from the output LAS points.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示在输出 LAS 数据中是保留还是消除与输入 LAS 点一起存储的可变长度记录。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中—可变长度记录将保留在输出 LAS 点中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将从输出 LAS 点中移除可变长度记录。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Remove Variable Length Records")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _remove_vlr_value _remove_vlr { get; set; } = _remove_vlr_value._false;

        public enum _remove_vlr_value
        {
            /// <summary>
            /// <para>REMOVE_VLR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_VLR")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>MAINTAIN_VLR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MAINTAIN_VLR")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Rearrange LAS Points</para>
        /// <para><xdoc>
        ///   <para>Indicates if LAS points will be stored in spatially organized clusters.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The order of the points in the LAS files will remain the same.</bullet_item><para/>
        ///     <bullet_item>Checked—The points in the LAS files will be rearranged. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示 LAS 点是否将存储在空间组织的聚类中。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - LAS 文件中点的顺序将保持不变。</bullet_item><para/>
        ///     <bullet_item>选中 - LAS 文件中的点将被重新排列。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Rearrange LAS Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _rearrange_points_value _rearrange_points { get; set; } = _rearrange_points_value._true;

        public enum _rearrange_points_value
        {
            /// <summary>
            /// <para>REARRANGE_POINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REARRANGE_POINTS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>MAINTAIN_POINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MAINTAIN_POINTS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Compute Statistics</para>
        /// <para><xdoc>
        ///   <para>Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Statistics will be computed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Statistics will not be computed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为 LAS 数据集引用的 .las 文件计算统计数据。计算统计为每个 .las 文件提供空间索引，从而提高分析和显示性能。统计数据还通过将 LAS 属性（如分类代码和返回信息）的显示限制为 .las 文件中存在的值来增强过滤和符号系统体验。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—将计算统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—不计算统计数据。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compute Statistics")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compute_stats_value _compute_stats { get; set; } = _compute_stats_value._true;

        public enum _compute_stats_value
        {
            /// <summary>
            /// <para>COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COMPUTE_STATS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_COMPUTE_STATS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Folder</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Folder")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_folder { get; set; }


        public ThinLas SetEnv(object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}